#include <iostream>
using namespace std;

const int N = 1010;

int n;
int a[N];    //获取输入
int f[N];    //获取动态递推
int res = 1; //存储答案，这个答案至少是一

int main()
{
    freopen("cin.txt", "r", stdin);
    cin >> n;
    for (int i = 1; i <= n; ++i) //这里注意，因为递推公式存在着具体意义，所以这里尽量要按照具体意义输入（虽然这次貌似从0输入也不会有边缘值）
        cin >> a[i];
    for (int i = 1; i <= n; ++i) //逐步递推
    {
        f[i] = 1;                           //先默认是1，因为如果前面都找不到比他打的，那么他就真的是1了
        for (int j = 1; j < i; ++j)         //比较前面所有序列
            if (a[i] > a[j])                //要满足严格单调递增这个目的
                f[i] = max(f[i], f[j] + 1); //那就一较高下
    }
    for (int i = 1; i <= n; ++i)
        res = max(res, f[i]); //找到最大的
    cout << res;
    return 0;
}